package org.csu.pet_store_2.persistence;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import org.csu.pet_store_2.Domain.Product;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface ProductMapper extends BaseMapper<Product> {

    //判断是否存在指定id的product（productid不区分大小写）
    default boolean isExistProduct(String productid) {
        QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("productid", productid);
        return this.exists(queryWrapper);
    }

    //返回指定id的product
    default Product getProductByProductid(String productid) {
        return this.selectById(productid);
    }

    //插入一个新product，返回实际操作的行数。product不为null且productid必须不在数据库中存在，否则不进行任何修改
    default int setNewProduct(Product product) {
        if (product == null) {
            return 0;
        }
        QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("productid", product.getProductid());
        if (!this.exists(queryWrapper)) {
            return this.insert(product);
        }
        return 0;
    }

    //一次性更新整条记录，返回实际修改的行数。product不为null且productid必须已经在数据库中存在，否则不进行任何修改
    default int setExistProduct(Product product) {
        if (product != null) {
            return this.updateById(product);
        }
        return 0;
    }

    /*
      单独修改数据库中的某个值，返回实际修改的行数。productid必须已经在数据库中存在，否则不进行任何修改
     */
    //参数category必须在数据库中的category表中存在，否则会报错
    default int setCategoryByProductid(String productid, String category) {
        Product product = this.selectById(productid);
        if (product != null) {
            product.setCategory(category);
            return this.updateById(product);
        }
        return 0;
    }
    default int setNameByProductid(String productid, String name) {
        Product product = this.selectById(productid);
        if (product != null) {
            product.setName(name);
            return this.updateById(product);
        }
        return 0;
    }
    default int setDescnByProductid(String productid, String descn) {
        Product product = this.selectById(productid);
        if (product != null) {
            product.setDescn(descn);
            return this.updateById(product);
        }
        return 0;
    }

    //返回Category为特定值的所有product
    default List<Product> getProductsListByCategory(String category) {
        QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("category", category);
        return this.selectList(queryWrapper);
    }
    default List<Product> getProductsList() {
        List<Product> products =  selectList(null);
        return products;
    }



    //删除指定id的product，返回实际修改的行数
    default int removeProductByProductid(String productid) {
        return this.deleteById(productid);
    }

}
